#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

typedef int SLTDataType;

typedef struct SListNode
{
    SLTDataType val;
    struct SListNode* next;
}SListNode;

void SListInit(SListNode** pphead);
void SListDestory(SListNode** pphead);

void SListPushBack(SListNode** pphead, SLTDataType val);
void SListPushFront(SListNode** pphead, SLTDataType val);
void SListInsert(SListNode** pphead, SLTDataType val, SListNode* pos);
void SListInsertAfter(SLTDataType val, SListNode* pos);

void SListPopBack(SListNode** pphead);
void SListPopFront(SListNode** pphead);
void SListErase(SListNode** pphead, SListNode* pos);
void SListEraseAfter(SListNode* pos);

void SListPrint(SListNode* phead);
SListNode* BuyNode(SLTDataType val);
SListNode* SListFind(SListNode* phead, SLTDataType val);